/**
 * 函数防抖 (只执行最后一次点击)
 * @param func 要执行的函数
 * @param wait 延迟时间
 * @param immediate 是否立即执行
 */
export let Throttle = (func, wait, immediate = false) => {
    console.log('防抖')
    let timeout // 定义一个计时器变量，用于延迟执行函数
    return function (...args) {
        // 返回一个包装后的函数
        const context = this // 保存函数执行上下文对象
        const later = function () {
            // 定义延迟执行的函数
            timeout = null // 清空计时器变量
            if (!immediate) func.apply(context, args) // 若非立即执行，则调用待防抖函数
        }
        const callNow = immediate && !timeout // 是否立即调用函数的条件
        clearTimeout(timeout) // 清空计时器
        timeout = setTimeout(later, wait) // 创建新的计时器，延迟执行函数
        if (callNow) func.apply(context, args) // 如果满足立即调用条件，则立即执行函数
    }
}

/**
 * 函数节流
 * @param Function 要执行的函数
 * @param interval 间隔时间
 */
export let Debounce = (fn, t) => {
    const delay = t || 500
    let timer
    return function () {
        const args = arguments
        if (timer) {
            clearTimeout(timer)
        }
        timer = setTimeout(() => {
            timer = null
            fn.apply(this, args)
        }, delay)
    }
}
